package kt.com.bilin.coin.utils;

import android.text.TextUtils;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * Created by zhoucl on 2018/5/23 0023.
 */
public class BigDecimalUtil {
    /**
     * 提供精确加法计算的add方法
     *
     * @param value1 被加数
     * @param value2 加数
     * @return 两个参数的和
     */
    public static String add(String value1, String value2) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        return b1.add(b2).toString();
    }

    /**
     * 提供精确减法运算的sub方法
     *
     * @param value1 被减数
     * @param value2 减数
     * @return 两个参数的差
     */
    public static String sub(String value1, String value2) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        return b1.subtract(b2).toEngineeringString();
    }

    /**
     * 提供精确乘法运算的mul方法
     *
     * @param value1 被乘数
     * @param value2 乘数
     * @return 两个参数的积
     */
    public static String mul(String value1, int value2) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        return b1.multiply(b2).toEngineeringString();
    }

    /**
     * 提供精确的除法运算方法div
     *
     * @param value1 被除数
     * @param value2 除数
     * @param scale  精确范围
     * @return 两个参数的商
     */
    public static String div(String value1, String value2, int scale) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toString();
    }

    public static BigDecimal div(Integer value1, Integer value2, int scale) {
        if (value1 == null || value2 == null || value1 == 0 || value2 == 0) return null;
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
    }

    public static int compareTo(String value1, String value2) {
        if (TextUtils.isEmpty(value1))
            return -1;
        if (TextUtils.isEmpty(value2))
            return 1;
        if (TextUtils.isEmpty(value1) && TextUtils.isEmpty(value2))
            return 0;
        return new BigDecimal(value1).compareTo(new BigDecimal(value2));
    }

    public static int compareTo(String value1, int value2) {
        if (TextUtils.isEmpty(value1))
            return -1;
        return new BigDecimal(value1).compareTo(new BigDecimal(value2));
    }

    public static String decimalFormat(double decimal) {
        try {
            DecimalFormat decimalFormat = new DecimalFormat("#.##");
            String format = decimalFormat.format(decimal);
            if (format.endsWith(".0")) {
                format.substring(0, format.indexOf("."));
            }
            return format;
        } catch (Exception e) {
            Logger.e(e);
        }
        return "0";
    }

    public static String decimalFormat2(double decimal) {
        try {
            DecimalFormat decimalFormat = new DecimalFormat("#.00");
            String format = decimalFormat.format(decimal);
            return format;
        } catch (Exception e) {
            Logger.e(e);
        }
        return "0";
    }

    /**
     * 距离
     *
     * @param distance
     * @return
     */
    public static String distanceFormat(String distance) {
        if (distance == null || TextUtils.isEmpty(distance)) return "";

        String str = distance.replace("km", "").replace("m", "");
        DecimalFormat df = new DecimalFormat("#.00");
        if (Double.parseDouble(str) < 1000) {
            return str + " m";
        } else {
            return df.format(Double.parseDouble(str) / 1000) + " km";
        }

    }
}
